#define TRACKFILTER_SEGMENT_OPTION "segment"
#define TRACKFILTER_FAKETIME_OPTION "faketime"
#define TRACKFILTER_DISCARD_OPTION "discard"
+#define TRACKFILTER_MINPOINTS_OPTION "minimum_points"
#undef TRACKF_DBG
static char* opt_segment = NULL;
static char* opt_faketime = NULL;
static char* opt_discard = NULL;
+static char* opt_minpoints = NULL;
static
arglist_t trackfilter_args[] = {
"Discard track points without timestamps during merge",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX
},
+ {
+ TRACKFILTER_MINPOINTS_OPTION, &opt_minpoints,
+ "Discard tracks with fewer than these points",
+ NULL, ARGTYPE_INT, "0"
+ },
ARG_TERMINATOR
};
Waypoint* wpt, *prev;
queue* elem, *tmp;
- if (track->rte_waypt_ct == 0) {
+ if (track->rte_waypt_ct == 0 ) {
track_del_head((route_head*)track);
return;
}
track_ct++;
}
+static void
+trackfilter_minpoint_list_cb(const route_head* track)
+{
+ int minimum_points = atoi(opt_minpoints);
+ if (track->rte_waypt_ct < minimum_points ) {
+ track_del_head((route_head*)track);
+ return;
+ }
+}
+
/*******************************************************************************
* track title producers
*******************************************************************************/
prev = track_list[j];
if (prev.last_time >= track_list[i].first_time) {
fatal(MYNAME "-pack: Tracks overlap in time! %s >= %s at %d\n",
- qPrintable(prev.last_time.toString()),
+ qPrintable(prev.last_time.toString()),
qPrintable(track_list[i].first_time.toString()), i);
}
}
trackfilter_split();
}
+
+ // Performed last as previous options may have created "small" tracks.
+ if ((opt_minpoints != NULL) && atoi(opt_minpoints) > 0) {
+ track_disp_all(trackfilter_minpoint_list_cb, NULL, NULL);
+ }
}
/******************************************************************************************/